package com.example.musicaiap.data.repository

import com.example.musicaiap.domain.model.Playlist
import com.example.musicaiap.domain.model.Song
import kotlinx.coroutines.flow.Flow

/**
 * 音乐仓库接口
 * 定义与音乐数据相关的操作
 */
interface MusicRepository {
    
    /**
     * 获取推荐歌曲列表
     */
    suspend fun getRecommendSongs(): List<Song>
    
    /**
     * 获取所有播放列表
     */
    suspend fun getPlaylists(): List<Playlist>
    
    /**
     * 获取播放列表详情
     */
    suspend fun getPlaylist(playlistId: String): Playlist
    
    /**
     * 获取播放列表中的歌曲
     */
    suspend fun getPlaylistSongs(playlistId: String): List<Song>
    
    /**
     * 获取歌曲详情
     */
    suspend fun getSong(songId: String): Song
    
    /**
     * 通过ID获取歌曲（非挂起函数版本，用于媒体服务）
     */
    fun getSongById(songId: String): Song?
    
    /**
     * 通过播放列表ID获取歌曲（非挂起函数版本，用于媒体服务）
     */
    fun getSongsByPlaylistId(playlistId: String): List<Song>
    
    /**
     * 搜索歌曲
     */
    suspend fun searchSongs(query: String): List<Song>
    
    /**
     * 获取歌词
     */
    suspend fun getLyrics(songId: String): String?
    
    /**
     * 添加歌曲到"我喜欢"
     */
    suspend fun addToFavorites(songId: String)
    
    /**
     * 从"我喜欢"中删除歌曲
     */
    suspend fun removeFromFavorites(songId: String)
    
    /**
     * 检查歌曲是否已收藏
     */
    suspend fun isSongFavorite(songId: String): Boolean
    
    /**
     * 切换歌曲收藏状态，并返回当前状态
     */
    suspend fun toggleFavorite(songId: String): Boolean
    
    /**
     * 获取收藏的歌曲列表
     */
    fun getFavoriteSongs(): Flow<List<Song>>
} 